package functional.lambda;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * Lambda 表达式：方法引用（Method Reference）中的特定类型的实例方法引用
 * 这种形式用于引用某一类对象的实例方法，但该方法需要在运行时通过 流中的元素 来确定是哪个对象的方法。
 * 这种引用的抽象方法通常需要 两个参数：第一个参数是要调用该方法的对象，第二个参数是方法的实际参数。
 *
 * @author Liu Yicong
 * @date 2025/10/8
 */
public class MethodRefType {
	public static void main(String[] args) {
		// 我们想通过 Stream 的 map 方法将一组 String 对象转换为它们的长度（Integer）。String 类的 length() 方法不需要参数。
		List<String> list = Arrays.asList("Java", "is", "Fun");

		// 原始 Lambda 表达式
		List<Integer> a = list.stream().map(s -> s.length()).collect(Collectors.toList());
		System.out.println(a);

		// 使用特定类型的任意对象实例方法引用
		a = list.stream().map(String::length).collect(Collectors.toList());
		System.out.println(a);
		// 这里的 s 自动作为调用 length() 的对象
		// 对应关系：s.length()
	}
}
